]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
Add shell_button_box_fake_release
authorColin Walters <walters@verbum.org>
Tue, 1 Sep 2009 18:14:19 +0000 (14:14 -0400)
committerColin Walters <walters@verbum.org>
Wed, 2 Sep 2009 19:01:33 +0000 (15:01 -0400)
The application menu code wants to do a popup after a given timeout
while holding.  We can implement that by adding a function to
manually break the grab held by the button box.

Freeze+thaw around the hover and pressed property notification on leave
since handlers may want to depend on the pressed state on a hover
transition.

src/shell-button-box.c
src/shell-button-box.h

index a7f54c38ebe1b572719e08b1b2ba6155a682815d..85ce121113eb79cdf113bae4dccbc31cdb084195 100644 (file)
@@ -89,9 +89,13 @@ shell_button_box_enter_event (ClutterActor         *actor,
   if (!shell_button_box_contains (box, event->source))
     return TRUE;
 
-  set_hover (box, TRUE);
+  g_object_freeze_notify (G_OBJECT (actor));
+
   if (box->priv->held)
     set_pressed (box, TRUE);
+  set_hover (box, TRUE);
+
+  g_object_thaw_notify (G_OBJECT (actor));
 
   return TRUE;
 }
@@ -159,6 +163,31 @@ shell_button_box_button_release_event (ClutterActor       *actor,
   return TRUE;
 }
 
+/**
+ * shell_button_box_fake_release:
+ * @box:
+ *
+ * If this button box is holding a pointer grab, this function will
+ * will ungrab it, and reset the pressed state.  The effect is
+ * similar to if the user had released the mouse button, but without
+ * emitting the activate signal.
+ *
+ * This function is useful if for example you want to do something after the user
+ * is holding the mouse button for a given period of time, breaking the
+ * grab.
+ */
+void
+shell_button_box_fake_release (ShellButtonBox *box)
+{
+  if (!box->priv->held)
+    return;
+
+  box->priv->held = FALSE;
+  clutter_ungrab_pointer ();
+
+  set_pressed (box, FALSE);
+}
+
 static void
 shell_button_box_set_property(GObject         *object,
                               guint            prop_id,
index 20d136ed35ec300427617c81a3334b39146d749a..4bd756ad3739fd570e0ac656cbad2064a6938be9 100644 (file)
@@ -30,4 +30,6 @@ struct _ShellButtonBoxClass
 
 GType shell_button_box_get_type (void) G_GNUC_CONST;
 
+void shell_button_box_fake_release (ShellButtonBox *box);
+
 #endif /* __SHELL_BUTTON_BOX_H__ */